#ifndef _VECTOR_H_
#define _VECTOR_H_

class Vector3 {
  public:
    Vector3(float x, float y, float z);
    ~Vector3();
    
    Vector3 operator+(const Vector3 & other) const;
    Vector3 operator-(const Vector3 & other) const;
    
    Vector3 normalize() const;
    float length() const;
    float squaredLength() const;
};

class Point3 {
  public:
    Point3(float x, float y, float z);
    Point3(const Vector3 & vector);
    ~Point3();
    
    Point3 operator+(const Vector3 & vector) const;
    Vector3 operator-(const Point3 & other) const;
    
	  Vector3 toVector3() const;
};

float dotProduct(const Vector3 & v1, const Vector3 & v2);
Vector3 crossProduct(const Vector3 & v1, const Vector3 & v2);

Vector3 operator*(float value, const Vector3 & vector);
Vector3 operator*(const Vector3 & vector, float value);

Vector3 operator/(float value, const Vector3 & vector);
Vector3 operator/(const Vector3 & vector, float value);

#endif
